
import {getNewVersion} from '@/api/index.js';
var _showWaiting;
/**
 * 检查软件更新
 */
function checkUpdate(appType){
	var deviceType = "";  
	if (plus.os.name == "iOS"){
		deviceType = "ios";
	} else {
		deviceType = "android";
	}
	/**
	 * 获取最新版本信息
	 * appType：user用户端，shoper商家端
	 * deviceType：ios，android
	 */
	getNewVersion(appType,deviceType).then(re =>{
		tipUpdate(re);
	}).catch( re=>{
		uni.showToast({
			icon: 'none',
		    title: "检查新版本失败",
		    duration: 2000
		});
	});  
	// uni.request({
	// 	method: "POST",
	// 	url: 'http://192.168.1.129:80/app/versionCt/getNewVersion',
	// 	data: {
	// 		appType: appType,
	// 		deviceType: deviceType
	// 	},
	// 	header: {
	// 		'content-type': 'application/x-www-form-urlencoded'
	// 	},
	// 	success: (res) => {
	// 		console.log(res);
	// 		let data = res.data;
	// 		if (data.code == 200){
	// 			tipUpdate(data.result);
	// 		} else{
	// 			uni.showToast({
	// 				icon: 'none',
	// 			    title: "检查新版本失败",
	// 			    duration: 2000
	// 			});
	// 		}	
	// 	},fail(e) {
	// 		console.log(e);
	// 	}
	// });
}

/**
 * 检查并提示更新
 * _map.version：新版本号
 * _map.downloadPath：安装下载地址
 */
function tipUpdate(_map){
	// ......  
	// 获取本地应用资源版本号  
	plus.runtime.getProperty(plus.runtime.appid, function(inf){
		var oldVersion = inf.version;
		// 需要更新
	    if (compareVersion(oldVersion, _map.version)){
			uni.showModal({
			    title: '提示',
			    content: '新版本已准备好',
				cancelText: '稍后再说',
				confirmText: '立即更新',
			    success:  (res) => {
			        if (res.confirm) {
			           	if (plus.os.name == "iOS"){
			           		// 跳转苹果商店、或fire等
			           		plus.runtime.openURL(_map.downloadPath);
			           	} else {
			           		// 下载新版本
			           		_showWaiting = plus.nativeUI.showWaiting("正在下载..",{back:"none"});// 提示期间禁止返回
			           		var dtask = plus.downloader.createDownload( _map.downloadPath, {}, function ( d, status ) {  
			           		    if ( d.state == 4 && status == 200 ) {
			           		    	// 下载成功,安装wgt包
			           		        installWgt(d.filename);
			           		    } else { 
			           		    	_showWaiting.close();
									uni.showToast({
										icon: 'none',
									    title: "下载失败",
									    duration: 2000
									});
			           		    }    
			           		});
			           		dtask.start();
			           		
			           		// 下载百分比监听
			           		var showPecent = 0, currentPecent = 0;
			           		dtask.addEventListener("statechanged", function(e){
			           			currentPecent = parseInt(e.downloadedSize / e.totalSize * 100);
			           			if (currentPecent != showPecent && !isNaN(currentPecent)){
			           				showPecent = currentPecent;
			           				_showWaiting.setTitle("请等待.."+showPecent+"%");
			           			}
			           		}, false);
			           	}
			        } else if (res.cancel) {
			            console.log('用户点击取消');
			        }
			    }
			});
	    }
	});
}

/**
 * 安装wgt包
 */
function installWgt(path){
	_showWaiting.setTitle("正在安装..");
	plus.runtime.install(path,{},function(){
		_showWaiting.close();
		uni.showModal({
		    title: '提示',
		    content: '应用资源更新完成！',
			showCancel: false,
		    success:  (res) => {
				if (res.confirm) {
					// 退出软件
					plus.runtime.quit();
				}
			}
		})
	},function(e){
		_showWaiting.close();
		uni.showToast({
			icon: 'none',
		    title: "安装失败",
		    duration: 2000
		});
	});
}

/**
 * 比较版本大小，如果新版本nv大于旧版本ov则返回true(要更新)，否则返回false
 * @param {String} ov
 * @param {String} nv
 * @return {Boolean}
 */
function compareVersion(ov, nv) {
    if (!ov || !nv || ov == "" || nv == "") {
        return false;
    }
    var ova = ov.split(".", 4),
        nva = nv.split(".", 4);
    for (var i = 0; i < ova.length && i < nva.length; i++) {
        var so = ova[i],
            no = parseInt(so),
            sn = nva[i],
            nn = parseInt(sn);
        if (nn > no || sn.length > so.length) {
            return true;
        } else if (nn < no) {
            return false;
        }
    }
    if (nva.length > ova.length && 0 == nv.indexOf(ov)) {
        return true;
    }
    return false;
}


export default checkUpdate